Der erste Schritt beim Pentesting ist die Informationsbeschaffung (Reconnaissance). Hier werden Informationen über das Zielsystem gesammelt, um potenzielle Schwachstellen zu identifizieren. Dies beinhaltet das Scannen des Netzwerks nach aktiven Hosts und offenen Ports.
Der Befehl arp-scan -l
scannt das lokale Netzwerk nach aktiven Hosts und zeigt deren IP- und MAC-Adressen an.
Hier wurde die IP-Adresse 192.168.2.113 identifiziert, die dem Hostnamen "liceo.hmv" zugeordnet wird.
Die Datei /etc/hosts
wird bearbeitet, um den Hostnamen "liceo.hmv" der IP-Adresse 192.168.2.113 zuzuordnen.
Dies ermöglicht die Verwendung des Hostnamens anstelle der IP-Adresse im weiteren Verlauf des Pentests.
Nach der Reconnaissance folgt die Web Enumeration. Hier werden Webanwendungen auf dem Zielsystem identifiziert und analysiert, um potenzielle Schwachstellen zu finden. Dies beinhaltet das Scannen des Webservers nach bekannten Dateien und Verzeichnissen.
Der Befehl dirb http://liceo.hmv
scannt den Webserver "liceo.hmv" nach bekannten Dateien und Verzeichnissen.
Es wurden die Verzeichnisse "/images", "/css", "/js" und "/uploads" sowie die Datei "index.html" gefunden.
Die "server-status" Seite ist mit einem 403 Fehlercode geschützt.
Der Befehl nikto -h http://192.168.2.113
scannt den Webserver "192.168.2.113" mit dem Nikto-Scanner auf bekannte Schwachstellen.
Nikto fand heraus, dass wichtige Sicherheitsheader fehlen (X-Frame-ptions, X-Content-Type-ptions), die IP Adresse geleaked wird, und Directory Indexing in /css/ und /images/ aktiviert ist.
nmap -sS -sV -A -T5 192.168.2.113 -p-
führt einen umfassenden Scan des Zielsystems (192.168.2.113) durch, um offene Ports und zugehörige Dienste zu identifizieren.
Die Option -sS verwendet SYN-Scans, um die Portzustände zu ermitteln, -sV versucht, die Version der laufenden Dienste zu identifizieren, -A aktiviert aggressive Scan-Optionen, einschließlich Betriebssystemerkennung und Skriptausführung, und -T5 setzt eine schnellere Timing-Vorlage. Der Parameter -p- gibt an, dass alle 65535 Ports gescannt werden sollen. Die Ausgabe wird dann mit grep nach Zeilen gefiltert, die "open" enthalten, um nur die offenen Ports anzuzeigen.
Die Ergebnisse zeigen, dass die Ports 21 (FTP), 22 (SSH) und 80 (HTTP) auf dem Zielsystem offen sind. Dies deutet auf laufende Dienste wie FTP (vsftpd 3.0.5), SSH (penSSH 8.9p1) und einen Apache HTTP-Server (2.4.52) hin.
Dieser Befehl führt einen umfassenden Nmap-Scan durch und liefert detaillierte Informationen über die offenen Ports und Dienste auf dem Zielsystem. Die Ergebnisse zeigen, dass auf Port 21 ein FTP-Server (vsftpd 3.0.5) läuft, der anonyme Anmeldungen erlaubt, und dass eine Datei namens "note.txt" vorhanden ist. Auf Port 22 läuft ein SSH-Server (penSSH 8.9p1), und auf Port 80 ein Apache HTTP-Server (2.4.52), der die Seite "Liceo" hostet. Der Scan liefert auch die MAC-Adresse des Zielsystems und gibt Hinweise auf das verwendete Betriebssystem (Linux).
Der Befehl ftp 192.168.2.113
startet eine FTP-Verbindung zum Zielsystem.
Es wurde versucht, sich anonym anzumelden, was erfolgreich war.
Nach erfolgreicher anonymer Anmeldung am FTP-Server wird mit dem Befehl ls -la eine detaillierte Auflistung der Dateien und Verzeichnisse im aktuellen Verzeichnis angefordert. Die Ausgabe zeigt, dass es eine Datei namens note.txt gibt, die für alle lesbar ist.
Die Datei note.txt
wurde erfolgreich vom FTP-Server heruntergeladen.
Es wurde versucht, die Datei sshroot
auf den FTP-Server hochzuladen, was jedoch aufgrund fehlender Berechtigungen fehlschlug.
Der Befehl gobuster dir -u http://liceo.hmv -x txt,php,rar,zip,tar,pub,xls,docx,doc,sql,db,mdb,asp,aspx,accdb,bat,ps1,exe,sh,py,pl,gz,jpeg,jpg,png,html,phtml,xml,csv,dll,pdf,raw,rtf,xlsx,zip,kdbx,bak,js -w "/usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt" -b '403,404' -e --no-error -k
führt eine Verzeichnisauflistung auf dem Webserver durch, um versteckte Dateien und Verzeichnisse zu finden.
Es wurde die Datei "upload.php" gefunden.
Die Datei note.txt
enthält eine Nachricht von Pedro Domínguez an Matias, in der er ihn bittet, die Sicherheit der Website zu gewährleisten.
Die E-Mail-Adresse liceoescuela@liceo.com könnte für weitere Reconnaissance nützlich sein.
Nach der Web Enumeration wird versucht, Initial Access zum System zu erhalten. Dies beinhaltet die Ausnutzung von Schwachstellen, die in den vorherigen Schritten identifiziert wurden. In diesem Fall wird die gefundene "upload.php"-Datei verwendet, um eine Webshell hochzuladen.
Die Analyse der Web Enumeration hat gezeigt, dass die Datei "upload.php" existiert. Dies deutet darauf hin, dass eine Upload-Funktionalität vorhanden ist. Es wird nun versucht, diese Funktion auszunutzen, um eine Webshell hochzuladen und somit Initial Access zum System zu erlangen.
Dieser Proof of Concept demonstriert, wie die Upload-Funktionalität auf der "upload.php"-Seite ausgenutzt werden kann, um eine Webshell hochzuladen und Befehle auf dem Server auszuführen.
Diese PHP-Datei enthält eine einfache Webshell, die Befehle über den "cmd"-Parameter entgegennimmt und ausführt.
Beim Hochladen der Datei wird geprüft, ob die Datei-Erweiterung "php" ist. Wenn dies der Fall ist, wird der Upload verhindert.
http://liceo.hmv/uploads/test.phtml?cmd=id
Dieser Befehl gibt die Benutzer-ID, Gruppen-ID und Gruppen des Webserver-Benutzers (www-data) aus.
Dieser Befehl startet eine Reverse Shell-Verbindung zum Angreifer-System (192.168.2.199) auf Port 4444.
Nach erfolgreichem Hochladen und Aufrufen der Webshell sollte eine interaktive Shell auf dem Zielsystem verfügbar sein.
Die folgenden Screenshots zeigen den erfolgreichen Upload der "test.phtml"-Datei und die Ausführung des "id"-Befehls über die Webshell:
Die Ausnutzung dieser Schwachstelle ermöglicht die Ausführung beliebiger Befehle auf dem Server, was zu einem vollständigen Systemkompromittierung führen kann.
Nachdem die Webshell erfolgreich hochgeladen wurde, wird eine Reverse Shell-Verbindung zum Angreifer-System aufgebaut.
Der Befehl nc -lvnp 4444
startet einen Netcat-Listener auf Port 4444, um die Reverse Shell-Verbindung entgegenzunehmen.
Nach erfolgreicher Verbindung wird eine Bash-Shell auf dem Zielsystem gestartet.
Der Befehl id
zeigt, dass die Shell mit dem Benutzer "www-data" ausgeführt wird, dem Benutzer des Webservers.
Die Ausgabe des Befehls ls -la
zeigt den Inhalt des aktuellen Verzeichnisses.
Es wurde die Datei "liceoweb.zip" gefunden, die möglicherweise interessante Informationen enthält.
Der Befehl python3 -m http.server 8000
startet einen einfachen HTTP-Server im aktuellen Verzeichnis auf Port 8000.
Dies ermöglicht das Herunterladen der Datei "liceoweb.zip" vom Angreifer-System.
Der Befehl wget liceo.hmv:8000/liceoweb.zip
lädt die Datei "liceoweb.zip" vom zuvor gestarteten HTTP-Server herunter.
Der Befehl cd /home/
wechselt in das Verzeichnis "/home/".
Die Ausgabe des Befehls ls -la
zeigt, dass es ein Verzeichnis "dev" gibt, das dem Benutzer "dev" gehört.
Der Befehl cd dev/
wechselt in das Verzeichnis "/home/dev/".
Die Ausgabe des Befehls ls -la
zeigt, dass es eine Datei "user.txt" gibt, die möglicherweise die User-Flag enthält.
Der Befehl cat user.txt
gibt den Inhalt der Datei "user.txt" aus, die die User-Flag enthält: 71ab613fa286844425523780a7ebbab2
Nachdem Initial Access erlangt wurde, wird versucht, die Privilegien auf dem System zu erhöhen. Dies beinhaltet die Suche nach Schwachstellen, die es ermöglichen, Root-Rechte zu erlangen.
Nachdem wir als "www-data" angemeldet sind, versuchen wir nun, unsere Privilegien zu erhöhen, um Root-Zugriff zu erhalten.
Der Befehl find / -type f -perm -4000 -ls 2>/dev/null
sucht nach Dateien mit dem SUID-Bit gesetzt.
Dies sind Dateien, die mit den Rechten des Eigentümers ausgeführt werden, unabhängig davon, welcher Benutzer sie startet.
Die Ausgabe wird nach "/dev/null" umgeleitet, um Fehlermeldungen zu unterdrücken.
Die Ausgabe zeigt eine Liste von SUID-Dateien. Besonders interessant ist /usr/bin/pkexec
, das eine bekannte Schwachstelle (CVE-2021-4034) aufweist.
Es wird auch /usr/bin/bash mit SUID bit angezeigt.
Der Befehl getcap -r / 2>/dev/null
sucht nach Dateien mit gesetzten Dateisystem-Capabilities.
Capabilities sind feingranulare Berechtigungen, die an einzelne Dateien vergeben werden können.
Die Ausgabe wird nach "/dev/null" umgeleitet, um Fehlermeldungen zu unterdrücken.
Die Ausgabe zeigt eine Liste von Dateien mit gesetzten Capabilities.
Die Datei /usr/bin/ping
hat die Capability cap_net_raw=ep
, die es ihr ermöglicht, rohe Netzwerkpakete zu senden.
Mit ls -la /etc/passwd werden die Dateirechte und Metadaten der Datei /etc/passwd angezeigt. Die Ausgabe zeigt, dass die Datei dem Benutzer und der Gruppe root gehört, die Leserechte für alle Benutzer hat, aber nur der Eigentümer (root) Schreibrechte besitzt. Diese Datei enthält wichtige Benutzerkontoinformationen und ist für die Systemintegrität entscheidend.
Der Befehl uname -a
zeigt die Kernel-Version des Systems.
Diese Information ist wichtig, um passende Exploits zu finden.
Der Befehl cat /etc/crontab zeigt den Inhalt der Crontab-Datei an, die systemweite Cronjobs enthält. Diese Datei definiert, welche Befehle zu bestimmten Zeiten oder Intervallen automatisch ausgeführt werden. Die Ausgabe zeigt, dass verschiedene Jobs wie die Ausführung von Skripten in /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly und /etc/cron.monthly als root-Benutzer ausgeführt werden. Dies könnte ein potenzieller Angriffspunkt sein, wenn ein Angreifer die Kontrolle über eines dieser Skripte erlangen könnte.
Der Befehl msfconsole -q
startet die Metasploit-Konsole im Quiet-Modus.
Anschließend wird der "multi/handler" Exploit ausgewählt und die LHOST (Angreifer-IP) und LPORT (Angreifer-Port) gesetzt.
Der Exploit wird dann gestartet, um eine Reverse Shell-Verbindung zu empfangen.
Dieser Befehl versucht, eine Reverse Shell über Netcat zu erstellen. Zuerst wird versucht, eine FIFO-Datei (/tmp/f) zu entfernen, falls sie bereits existiert, und dann eine neue FIFO-Datei erstellt. Anschließend wird versucht, die Standardeingabe und Standardausgabe über diese FIFO-Datei an eine Netcat-Verbindung zum Angreifer (192.168.2.199 auf Port 5555) umzuleiten. Der Fehler "rm: cannot remove '/tmp/f': No such file or directory" deutet darauf hin, dass die Datei /tmp/f nicht vorhanden war, als der Befehl ausgeführt wurde.
Die Ausgabe zeigt, dass eine Command Shell-Sitzung auf Port 5555 geöffnet wurde.
Die Ausgabe Shell Banner zeigt, dass wir eine Sitzung geöffnet haben.
Dieser Befehl schickt die Sitzung in den Hintergrund.
Dieser Befehl selectiert die geöffnete Sitzung 1.
Dieser Befehl verwendet ein Metasploit Post-Modul namens "shell_to_meterpreter", um eine bestehende Shell-Sitzung in eine Meterpreter-Sitzung zu konvertieren. Zuerst wird die Sitzungs-ID (session 1) festgelegt. Dann wird das Modul ausgeführt, um die bestehende Shell-Sitzung zu erweitern. Nach erfolgreicher Ausführung wird eine neue Meterpreter-Sitzung (Session 2) geöffnet, die erweiterte Funktionen wie Speicheranalyse, Dateisysteminteraktion und mehr bietet. Die Ausgabe zeigt den Fortschritt des Upgrade-Prozesses und die erfolgreiche Eröffnung der Meterpreter-Sitzung.
Dieser Befehl verwendet die Sitzung mit der ID 1
Dieser Befehl versucht, die LPORT-Option auf 5554 zu setzen. Jedoch wird die LPORT-Option nicht gefunden und kann nicht durchgeführt werden.
Dieser Befehl führt den Exploit CVE-2021-4034 (PwnKit) aus, um lokale Privilegien zu eskalieren. Zuerst wird die Sitzungs-ID auf 2 gesetzt und die LHOST- und LPORT-Optionen konfiguriert. Dann wird der Exploit ausgeführt. Die Ausgabe zeigt, dass der automatische Check fehlschlägt und der Exploit abgebrochen wird, da das Zielsystem nicht als anfällig für diese Schwachstelle erkannt wird. Der Hinweis "set ForceExploit true" deutet darauf hin, dass der Check überschrieben werden könnte, um den Exploit trotzdem auszuführen.
Die Ausgabe zeigt, dass der Exploit abgeschlossen wurde, aber keine neue Sitzung erstellt wurde. Anschließend wird der Befehl search suggester ausgeführt, um nach Modulen zu suchen, die möglicherweise für das Zielsystem geeignet sind.
Dieser Befehl zeigt die Ergebnisse der Suche nach passenden Modulen an. Es wird ein Modul namens "post/multi/recon/local_exploit_suggester" gefunden, das dazu dient, lokale Exploits auf dem Zielsystem zu finden.
Dieser Befehl zeigt die Benutzung des Exploit.
Dieser Befehl führt das Modul 0 (post/multi/recon/local_exploit_suggester) aus. Während des automatischen Checks wird der Exploit jedoch durch eine Benutzerunterbrechung abgebrochen.
Dieser Befehl selectiert den Exploit mit der ID 0 und versucht die Port Option auf 5554 zu setzen, die Option wird aber nicht gefunden.
Dieser Befehl konfiguriert das Modul "post/multi/recon/local_exploit_suggester", indem die Sitzungs-ID auf 2 gesetzt wird. Anschließend wird das Modul ausgeführt, um nach lokalen Exploits auf dem Zielsystem zu suchen. Die Ausgabe zeigt, dass das Modul verschiedene Exploits findet, die möglicherweise auf dem Zielsystem funktionieren könnten, darunter "exploit/linux/local/cve_2022_0847_dirtypipe", "exploit/linux/local/netfilter_priv_esc_ipv4", "exploit/linux/local/pkexec" und "exploit/linux/local/su_login".
Die Ausgabe zeigt eine Liste von potenziell anfälligen Exploits für das Zielsystem. Insbesondere wird der Exploit "exploit/linux/local/cve_2022_0847_dirtypipe" als anfällig eingestuft
Der Befehl use exploit/linux/local/cve_2022_0847_dirtypipe
wählt den "Dirty Pipe" Exploit aus.
Dieser Exploit nutzt eine Schwachstelle im Linux-Kernel, um Root-Rechte zu erlangen.
Dieser Befehl zeigt die Optionen des Exploits
Die Sitzung wird auf 2 gesetzt, LPORT auf 5554 und LHOST auf 192.168.2.199.
Der Exploit wird ausgeführt. Die Ausgabe zeigt, dass das Zielsystem anfällig für den "Dirty Pipe" Exploit ist. Der Exploit schreibt eine Datei nach "/tmp/.iufdligymce" und führt sie aus, um Root-Rechte zu erlangen.
Die Ausgabe zeigt den Inhalt des Verzeichnisses "/home/dev/".
Der Befehl ls -la zeigt den Inhalt des aktuellen Verzeichnisses (/home/dev) mit detaillierten Informationen über jede Datei und jedes Verzeichnis. Die Ausgabe umfasst die Zugriffsrechte, den Eigentümer, die Größe, das Änderungsdatum und den Namen jeder Datei. Unter anderem sind die Dateien .bash_logout, .bashrc, .profile und user.txt sowie die Verzeichnisse .cache, .local und .ssh aufgelistet. Die Datei user.txt enthält vermutlich die User-Flag.
Der Befehl cd .local/ wechselt in das Verzeichnis .local im aktuellen Verzeichnis des Benutzers dev. Anschließend wird mit ls -la der Inhalt dieses Verzeichnisses aufgelistet, um die vorhandenen Dateien und Unterverzeichnisse anzuzeigen. Die Ausgabe zeigt, dass es ein Unterverzeichnis namens share gibt.
Der Befehl cd share/ versucht, in das Verzeichnis "share" zu wechseln, was jedoch aufgrund fehlender Berechtigungen fehlschlägt.
Der Befehl cat .lesshst versucht, den Inhalt der Datei ".lesshst" anzuzeigen, aber die Datei existiert nicht im aktuellen Verzeichnis.
Mit dem Befehl cd - kehrt man in das vorherige Verzeichnis zurück.
Es wird versucht die Datei .lesshst auszuführen was aber fehl schlägt.
Der Befehl pwd zeigt das aktuelle Verzeichnis an, das "/home/dev" ist. Dann wird versucht, den Inhalt der Datei ".lesshst" anzuzeigen, was jedoch aufgrund fehlender Berechtigungen fehlschlägt.
Der Befehl grep -ri password * 2>/dev/null sucht rekursiv und ohne Beachtung der Groß-/Kleinschreibung nach dem Wort "password" in allen Dateien im aktuellen Verzeichnis. Fehlermeldungen werden nach /dev/null umgeleitet. Die Ausgabe zeigt, dass das Wort "password" in der Datei "bootstrap.log" gefunden wurde.
Dieser Befehl zeigt die Dateiattribute der /etc/shadow
Der Befehl cat /etc/shadow versucht, den Inhalt der Datei "/etc/shadow" anzuzeigen, was jedoch aufgrund fehlender Berechtigungen fehlschlägt.
Der Befehl echo "ben" >> /etc/shadow versucht, den Text "ben" an die Datei "/etc/shadow" anzuhängen, was jedoch aufgrund fehlender Berechtigungen fehlschlägt.
Der Befehl find / -user dev 2>/dev/null sucht nach allen Dateien und Verzeichnissen, die dem Benutzer "dev" gehören. Fehlermeldungen werden nach "/dev/null" umgeleitet. Die Ausgabe zeigt eine Liste von Dateien und Verzeichnissen, die dem Benutzer "dev" gehören, darunter die Datei "/srv/ftp/note.txt" und das Home-Verzeichnis "/home/dev" mit seinen Unterverzeichnissen und Dateien.
Fortsetzung der Versuche, die Privilegien auf dem System zu erhöhen, um Root-Rechte zu erlangen.
Privilege Escalation
Der Befehl /bin/bash -p startet eine neue Bash-Shell mit erhöhten Privilegien. Die Option -p sorgt dafür, dass die Shell ihre Privilegien beibehält, was in diesem Fall bedeutet, dass sie als Root ausgeführt wird.
Der Befehl id
zeigt die Benutzer- und Gruppeninformationen der aktuellen Shell.
Die Ausgabe zeigt, dass die Shell mit Root-Rechten ausgeführt wird (uid=33(www-data), euid=0(root)). Dies bedeutet, dass die Privilege Escalation erfolgreich war.
Der Befehl cd ~
wechselt in das Home-Verzeichnis des aktuellen Benutzers (in diesem Fall Root).
Die Ausgabe zeigt den Inhalt des Home-Verzeichnisses des aktuellen Benutzers (in diesem Fall Root).
Der Befehl cd /root/ wechselt in das Root Verzeichnis.
Der Befehl cat root.txt
gibt den Inhalt der Datei "root.txt" aus, die die Root-Flag enthält.
Zusammenfassung der gefundenen Flags.